20180430抓取AMG的所有音樂分類
AMG網頁裡面含有大量的javascript,
如果只使用一般的方式抓取原始碼得不到需要的資訊,
所以我們先使用之前學習的selenium將包含JS資料的原始碼存取下來。
這次我們要放棄聽說年久失修的PhatomJS,我們用headless的Chrome。
事前準備:
1.Chrome瀏覽器 v60
2.ChormeDriver 2.38 (https://sites.google.com/a/chromium.org/chromedriver/downloads)
首先將下載的chromedriver.exe解壓縮,整理到自己喜歡的位置。
接著把原本的code從PhantomJS原封不動地換成Chorme就可以了歐。
from selenium import webdriver
chrome_path = r"C:\Users\Ramone\seleniumdriver\chrome\chromedriver.exe" # 給定chromedriver的位置 (字串前的r為raw ->\不轉意)
driver = webdriver.Chrome(chrome_path) # 導入Chorme當作webdriver
driver.get('https://www.allmusic.com/advanced-search/') # 輸入網址,交給瀏覽器
pageSource = driver.page_source # 取得網頁原始碼
#print(pageSource)
driver.close()
分析原始碼之後,發現所有音樂的分類標籤,都存在input這個類別裏頭,
我們將資訊用input以及id (正則表達)篩取出來包給bs,
利用迴圈將value(音樂類別)與id (AMG的類別碼) 製程一個字典(之後也許可以呼叫),
並且打印出來所有value。
import requests
import re
from bs4 import BeautifulSoup
soup = BeautifulSoup(pageSource,"lxml")
label = soup.find_all('input',{'id':re.compile('genreid.*?')})
label_dict={}
for l in label:
label_dict[l['value']]=l['id']
print (l['value'],l['id'])
###Output
Avant-Garde genreid:MA0000012170
Computer Music subgenreid:MA0000012238
Conceptual Art subgenreid:MA0000011891
Creative Orchestra subgenreid:MA0000012269
Experimental subgenreid:MA0000002582
Free Improvisation subgenreid:MA0000004486
Improvisation subgenreid:MA0000012076
Microtonal subgenreid:MA0000012082
Minimalism subgenreid:MA0000012315
Mixed Media subgenreid:MA0000012251
.....
.....
總共會有1124種分類,真的是好多挖!